package easy;

public class a121_买卖股票的最佳时机 {
    //超时
//    public int maxProfit(int[] prices) {
//        int max = Integer.MIN_VALUE;
//        for (int len = prices.length - 1; len >= 0; len--) {
//            for (int j = 0; j < len ; j++) {
//                max = Math.max(max, prices[len] - prices[j]);
//            }
//        }
//        if (max < 0) {
//            return 0;
//        }
//        return max;
//    }
//    动态规划
    public int maxProfit(int[] prices) {
        int len = prices.length;
        // 特殊判断
        if (len < 2) {
            return 0;
        }
        int[][] dp = new int[len][2];

        // dp[i][0] 下标为 i 这天结束的时候，不持股，手上拥有的现金数
        // dp[i][1] 下标为 i 这天结束的时候，持股，手上拥有的现金数

        // 初始化：不持股显然为 0，持股就需要减去第 1 天（下标为 0）的股价
        dp[0][0] = 0;
        dp[0][1] = -prices[0];

        // 从第 2 天开始遍历
        for (int i = 1; i < len; i++) {
            dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i - 1][1], -prices[i]);
        }
        return dp[len - 1][0];
    }
}